#Область ОписаниеПеременных

#КонецОбласти

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	КлючОбъектаНастроек=УИ_ОбщегоНазначенияКлиентСервер.КлючДанныхОбъектаДанныхОтладкиВХранилищеНастроек();
	КаталогДаныхОтладкиНаСервере = УИ_ОбщегоНазначения.КаталогФайловДанныхОтладкиНаСервере();

	ОбновитьТаблицуНаСервере();
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы
// Код процедур и функций
#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура ВыполнитьОтладку(Команда)
	ТекДанные=Элементы.ТаблицаСохраненныхНастроек.ТекущиеДанные;
	Если ТекДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;

	УИ_ОбщегоНазначенияКлиент.ЗапуститьКонсольОтладкиПоАдресуХраненияДанныхОтладки(ТекДанные.АдресВХранилищеДанныхОтладки,
																				   ТекДанные.ЭтоФайл,
																				   ТекДанные.ТипОбъектаОтладки,
																				   ТекДанные.Автор,
																				   УникальныйИдентификатор);

КонецПроцедуры

&НаКлиенте
Процедура ОбновитьТаблицу(Команда)
	ОбновитьТаблицуНаСервере();
КонецПроцедуры

&НаКлиенте
Процедура Удалить(Команда)

	ВыделенныеСтроки = Элементы.ТаблицаСохраненныхНастроек.ВыделенныеСтроки;
	Если ВыделенныеСтроки.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;

	УдалитьВыделенныеСтроки(ВыделенныеСтроки);

КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ОбновитьТаблицуНаСервере()
	ТаблицаСохраненныхНастроек.Очистить();
	ПрочитатьДанныеИзХранилищаНастроек();
	ПрочитатьДанныеИзКаталога();
	ТаблицаСохраненныхНастроек.Сортировать("ДатаСоздания УБЫВ");
КонецПроцедуры

&НаСервере
Процедура ПрочитатьДанныеИзХранилищаНастроек()
	Картинка = БиблиотекаКартинок.ХранилищеНастроек;
	
	СтруктураПоиска=Новый Структура;
	СтруктураПоиска.Вставить("КлючОбъекта", КлючОбъектаНастроек);

	Выборка=ХранилищеСистемныхНастроек.Выбрать(СтруктураПоиска);

	Пока Выборка.Следующий() Цикл
		НоваяСтрока=ТаблицаСохраненныхНастроек.Добавить();
		НоваяСтрока.АдресВХранилищеДанныхОтладки=Выборка.КлючНастроек;
		НоваяСтрока.Пользователь=Выборка.Пользователь;
		НоваяСтрока.Картинка = Картинка;

		МассивКлючаНастроек=СтрРазделить(НоваяСтрока.АдресВХранилищеДанныхОтладки, "/");

		НоваяСтрока.Автор=МассивКлючаНастроек[1];
		НоваяСтрока.ТипОбъектаОтладки=МассивКлючаНастроек[0];
		Попытка
			НоваяСтрока.ДатаСоздания=Дата(МассивКлючаНастроек[2]);
		Исключение
			НоваяСтрока.ДатаСоздания="";
		КонецПопытки;
		Попытка
			НоваяСтрока.ИмяОбъектаОтладки=МассивКлючаНастроек[3];
		Исключение
			НоваяСтрока.ИмяОбъектаОтладки="";
		КонецПопытки;

	КонецЦикла;
КонецПроцедуры

&НаСервере
Функция МетаданныеОбъектаОтладкиИзФайла(ИмяФайлаМетаданных)

	Возврат УИ_ОбщегоНазначенияКлиентСервер.мПрочитатьJSONИзФайла(ИмяФайлаМетаданных);
	
КонецФункции

&НаСервере
Процедура ПрочитатьДанныеИзКаталога()
	Картинка = БиблиотекаКартинок.ОткрытьФайл;
	
	Файлы = НайтиФайлы(КаталогДаныхОтладкиНаСервере, "*.json", Истина);
	
	Для Каждого ТекущийФайл Из Файлы Цикл
		МетаданныеОбъекта = МетаданныеОбъектаОтладкиИзФайла(ТекущийФайл.ПолноеИмя);
		
		НоваяСтрока=ТаблицаСохраненныхНастроек.Добавить();
		НоваяСтрока.АдресВХранилищеДанныхОтладки=ТекущийФайл.Путь;
		НоваяСтрока.Автор=МетаданныеОбъекта.Автор;
		НоваяСтрока.Картинка = Картинка;
		НоваяСтрока.ТипОбъектаОтладки=МетаданныеОбъекта.ТипОбъектаОтладки;
		НоваяСтрока.ЭтоФайл = Истина;
		НоваяСтрока.ИмяОбъектаОтладки = МетаданныеОбъекта.Наименование;
		Попытка
			НоваяСтрока.ДатаСоздания = XMLЗначение(Тип("Дата"), МетаданныеОбъекта.Дата);
		Исключение
			НоваяСтрока.ДатаСоздания = ТекущийФайл.ПолучитьВремяИзменения();
		КонецПопытки;
	
	КонецЦикла;
КонецПроцедуры

&НаСервере
Процедура УдалитьВыделенныеСтроки(Знач ВыделенныеСтроки)

	Для каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
		УдалитьНаСервере(ВыделеннаяСтрока);
	КонецЦикла; 	
	ОбновитьТаблицуНаСервере();

КонецПроцедуры // УдалитьВыделенныеСтроки()
 
&НаСервере
Процедура УдалитьНаСервере(ТекущаяСтрока)

	СтрокаТЧ = ТаблицаСохраненныхНастроек.НайтиПоИдентификатору(ТекущаяСтрока);

	Если СтрокаТЧ.ЭтоФайл Тогда
		//@skip-check empty-except-statement
		Попытка
			УдалитьФайлы(СтрокаТЧ.АдресВХранилищеДанныхОтладки);
		Исключение
			//УИ_ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Не удалось ");
		КонецПопытки;
	Иначе
		УИ_ОбщегоНазначения.ХранилищеСистемныхНастроекУдалить(КлючОбъектаНастроек,
															  СтрокаТЧ.АдресВХранилищеДанныхОтладки,
															  СтрокаТЧ.Пользователь);
	КонецЕсли;
КонецПроцедуры


#КонецОбласти

